package com.naiterui.ehp.bs.recommend.util;

import java.math.BigDecimal;
import java.util.Date;

import com.naiterui.ehp.bp.utils.date.DateUtil;

public class SerialNumberUtil {

    // ---------------------------------------------------------------------------------------------
    // medication recom
    // ---------------------------------------------------------------------------------------------

    /**
     * 生成购药处方笺编号
     * SerialNumberUtil.genRecomNumber()
     *
     * @param departmentId 科室ID
     *
     * @return
     *
     * @Date 2016年6月28日
     * @since 2.5.0
     */

    public static String genRecomNumber(Integer departmentId) {

        String serialNumberKey = SerialNumberUtil.getSerialKey(PropertyValueConstants.MEDICATION_RECOM_SERIAL_PRE, departmentId, new Date());
        Long serial = RedisUtils.incre(serialNumberKey);
        return serialNumberKey + SerialNumberUtil.digitFill(5, serial);
    }

    /**
     * 处方笺初始化，处方笺默认编号
     * SerialNumberUtil.getRecomDefaultNum()
     *
     * @param departmentId 科室ID
     *
     * @return
     *
     * @Author mudou
     * @Date 2017年10月23日
     * @since 2.12.0
     */

    public static String getRecomDefaultNum(Integer departmentId) {
        return SerialNumberUtil.getSerialKey(PropertyValueConstants.MEDICATION_RECOM_SERIAL_PRE, departmentId, new Date()) + "*****";
    }


    // ---------------------------------------------------------------------------------------------
    // private method
    // ---------------------------------------------------------------------------------------------

    /**
     * 医生推荐用药处方笺编号前缀(流水号前)
     * RecomSerialNumberUtil.getRecomSerialKey()
     *
     * @param departmentId
     * @param date         段位 第1段 第2段 第3段 第4段
     *                     含义 业务首字母 科室ID 年月日 流水号
     *                     限制 Q 固定4位 6位 固定5位
     *                     示例 Q 0323 160721 09317
     *
     * @Date 2016年6月28日
     * @since 2.5.0
     */

    private static String getSerialKey(String busProfix, Integer departmentId, Date date) {

        String aimNumStr = digitFill(4, departmentId);
        String dateStr = DateUtil.formatDate(date, "yyMMdd");
        return busProfix + aimNumStr + dateStr;
    }

    /**
     * 数字补位
     * RecomSerialNumberUtil.digitFill()
     *
     * @param position 补位后总长度
     * @param aimNum   目标数(long范围)
     *
     * @return
     *
     * @Date 2016年6月28日
     * @since 2.5.0
     */

    public static String digitFill(int position, Number aimNum) {

        if (position <= 0) {
            return "0";
        }
        String tempStr = BigDecimal.valueOf(Math.pow(10, position) + (null == aimNum || aimNum.longValue() < 0 ? 0 : aimNum.longValue())).setScale(0)
                                   .toString();
        return tempStr.substring(tempStr.length() - position);
    }
}
